package com.jy.wms.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.SysFunctionMapper;
import com.jy.wms.pojo.SysFunction;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ClassName: SysFunctionService.java
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @Author lh
 * @Date Wed Aug 30 18:14:20 GMT+08:00 2017
 */

@Service
public class SysFunctionService extends BaseService<SysFunctionMapper, SysFunction> {

    /**
     * 插入一条记录
     *
     * @param entity 实体对象
     * @return int
     */
    @BaseServiceDescribe(moduleName = "功能增加", btnName = "增加功能")
    public void baseInsert(SysFunction entity) throws ServiceException, SucessException {
        entity.setLabel(entity.getMc());
        Integer a = dao.baseInsert(entity);
        if (a > 0) {
            throw new SucessException("功能增加成功");
        } else {
            throw new ServiceException("功能增加失败");
        }
    }

    /**
     * 插入一条记录（匹配有值的字段）
     *
     * @param entity   实体对象
     * @param database 数据库名称
     * @return int
     */
    public Integer baseInsertSelective(SysFunction entity, String database) {
        return dao.baseInsertSelective(entity, database);
    }

    /**
     * 删除（根据主键ID删除）
     *
     * @param id       主键
     * @param database 数据库名称
     * @return int
     */
    public Integer baseDeleteByPrimaryKey(String id, String database) {
        return dao.baseDeleteByPrimaryKey(id, database);
    }

    /**
     * 删除（根据ID 批量删除）
     *
     * @param idList 主键ID列表
     * @return int
     */
    public Integer baseDeleteBathPrimaryKeys(List<String> idList) {
        return dao.baseDeleteBathPrimaryKeys(idList);
    }

    /**
     * 分页查询
     *
     * @param entity   实体
     * @param database 数据库名称
     * @return Page<SysFunction>
     */
    public Page<SysFunction> baseSelectPage(SysFunction entity, String database) {
        PageHelper.startPage(entity.getPage(), entity.getRows());
        return (Page<SysFunction>) dao.baseSelectPage(entity, database);
    }

    /**
     * 查询（根据主键ID查询）
     *
     * @param id       主键ID
     * @param database 数据库名称
     * @return SysFunction
     */
    public SysFunction baseSelectByPrimaryKey(String id, String database) {
        return dao.baseSelectByPrimaryKey(id, database);
    }

    /**
     * 查询（根据ID 批量查询）
     *
     * @param idList   主键ID列表
     * @param database 数据库名称
     * @return list
     */
    public Integer baseSelectBathPrimaryKeys(List<SysFunction> idList, String database) {
        return dao.baseSelectBathPrimaryKeys(idList, database);
    }

    /**
     * 修改 （匹配有值的字段）
     *
     * @param entity 主键ID列表
     * @return int
     */

    @BaseServiceDescribe(moduleName = "功能修改", btnName = "修改功能")
    public void baseUpdateByPrimaryKeySelective(SysFunction entity) throws SucessException, ServiceException {
        entity.setLabel(entity.getMc());
        //编码去重（所有的编码不可重复）
        Integer count = dao.selectCount(new EntityWrapper<SysFunction>().eq("code", entity.getCode()).notIn("id", entity.getId()));
        //名称去重（当前菜单下的名称不可重复）
        Integer count2 = dao.selectCount(new EntityWrapper<SysFunction>().eq("mc", entity.getMc()).eq("sscdid", entity.getSscdid()).notIn("id", entity.getId()));
        if (count > 0) {
            throw new ServiceException("编码不能重复，修改");
        } else if (count2 > 0) {
            throw new ServiceException("当前菜单下的名称不能重复，修改");
        } else {
            Integer a = dao.baseUpdateByPrimaryKeySelective(entity);
            if (a > 0) {
                throw new SucessException("修改功能成功");
            } else {
                throw new ServiceException("修改功能失败");
            }
        }
    }

    /**
     * 修改（根据主键ID修改）
     *
     * @param entity   主键ID列表
     * @param database 数据库名称
     * @return int
     */
    public Integer baseUpdateByPrimaryKey(SysFunction entity, String database) {
        return dao.baseUpdateByPrimaryKey(entity, database);
    }

    public Integer getCountByCode(String code) {
        return dao.getCountByCode(code);
    }
}
